package design.donkey.auto.ddl.model;

import design.donkey.framework.common.orm.annotation.JdbcType;
import design.donkey.framework.common.orm.annotation.PrimaryKeyType;
import lombok.Data;
import lombok.experimental.Accessors;

/**
 * 列元数据模型
 *
 * @author zhangjiakung
 * @since 0.0.1
 */
@Data
@Accessors(chain = true)
public class ColumnMetaModel {

    /**
     * 名称 等同于
     */
    private String name;

    /**
     * jdbcType 类型值
     *
     */
    private JdbcType jdbcType;

    /**
     * 类型长度，如果为小数时表述 数值存储总长度
     *
     */
    private int length;

    /**
     * 当为小数时的 总长度 兼容
     */
    private int precision;

    /**
     * 当为小数时得精度
     *
     */
    private int scale;

    /**
     * 有无符号 列类型为 数值时有效
     */
    private boolean unsigned;

    /**
     * 是否为主键
     *
     */
    private boolean primaryKey;

    /**
     * 主键类型
     */
    private PrimaryKeyType primaryKeyType;

    /**
     * 是否唯一
     */
    private boolean unique;

    /**
     * 是否允许为 null
     *
     */
    private boolean nullable;

    /**
     * 是否使用 0 填充 列类型为 数值时有效
     *
     */
    private boolean zerofill;

    /**
     * 默认值 ddl 表达式，
     *
     */
    private String defaultValue;

    /**
     * 发生修改后的默认值 ddl 表达式，
     *
     */
    private String defaultValueForUpdate;

    /**
     * 备注
     *
     */
    private String comment;

    /**
     * 列详情 设置该值时，除 {@link #name} 其他列配置无效
     */
    private String columnDefinition;

}
